#include "RuedaPrincipal.h"

#define PI 3.14159265

/*
*	Seteos RUEDA PRINCIPAL
*	cantRayos = 15
*	radio = 8
*	cantSoldaduras = 3
*	separacionDiscos = 3
*/
RuedaPrincipal::RuedaPrincipal() : Rueda(15, 8, 3, 3)
	{
	for(int i=0;i<3;i++)
		this->ruedaSecundaria[i] = new RuedaSecundaria();
	}

RuedaPrincipal::~RuedaPrincipal()
	{
	for(int i=0;i<3;i++)
		delete this->ruedaSecundaria[i];
	}

void RuedaPrincipal::dibujar(int tiempoDurEscena)
	{
	glPushMatrix();
	
	/*	nAngle: indica el angulo de giro que se va produciendo para soldar las ruedaa secundarias a la rueda principal.	*/
	GLfloat nAngle = 360.0 / this->cantidadSoldaduras;
	GLfloat angle = 0;
	GLfloat radio = this->disco->getRadioDisco();
	GLfloat angunlo_rotacion = (this->getVelAngular()*tiempoDurEscena);
	/*	Dibujo las ruedas secundarias.	*/
	for(int i =0; i< 3;i++) {
		glPushMatrix();
		/*	Traslado la rueda secundaria para que queden siempre vertical las cabinas (no rotar!).	*/
		glTranslatef(radio*cos(((angle - angunlo_rotacion))*PI/180), -1* (GLfloat)this->separacionDiscos/4 , radio*sin((angle - angunlo_rotacion)*PI/180));
		/*	Dibujo la rueda secundaria.	*/
		this->ruedaSecundaria[i]->dibujar(tiempoDurEscena);
		glPopMatrix();
		angle += nAngle;
		}

	glPushMatrix();
	glRotatef(angunlo_rotacion , 0.0, 1.0, 0.0);
	glRotatef(90, 1.0, 0.0, 0.0);
	/*	Seteo el color celeste de la rueda primaria.	*/
	glColor3f(0.0, 1.0, 1.0);
	/*	Dibujo la rueda primaria	*/
	Rueda::dibujar(tiempoDurEscena);
	glPopMatrix();
	
	glPopMatrix();
	}

RuedaSecundaria* RuedaPrincipal::getRuedaSecundaria(unsigned int i) {
	if(i<3)
		return this->ruedaSecundaria[i];
	else
		return 0;
}
